package language_basic

import "fmt"

/*
Go 语言的入口 main() 函数所在的包（package）叫 main，main 包想要引用别的代码，需要import导入！
// 单个导入
import "package"
// 批量导入
import (
	"package1"
	 p2 "package2" //别名操作，调用包函数时前缀变成了p2
	. "fmt" //包导入之后在调用这个包的函数时，你可以省略前缀的包名
	_ "github.com/ziutek/mymysql/godrv" //仅执行包的init()，不调用函数
)
*/

/*
import导入时，会从GO的安装目录（也就是GOROOT环境变量设置的目录）和GOPATH环境变量设置的目录中，检索 src/package 来导入包。如果不存在，则导入失败。 GOROOT，就是GO内置的包所在的位置。 GOPATH，就是我们自己定义的包的位置。
通常我们在开发Go项目时，调试或者编译构建时，需要设置GOPATH指向我们的项目目录，目录中的src目录中的包就可以被导入了。

*/

/**

init函数会在包被导入时执行，例如如果是在 main 中导入包，包中存在 init()，那么 init() 中的代码会在 main() 函数执行前执行，用于初始化包所需要的特定资料。
*/
func init() {
	fmt.Println("包的管理 init")
}

/**
如果 package 存在依赖，调用顺序为最后被依赖的最先被初始化，例如：导入顺序 main –> A –> B –> C，则初始化顺序为 C –> B –> A –> main，一次执行对应的 init 方法。main 包总是被最后一个初始化，因为它总是依赖别的包
*/

/**
go允许import不同代码库的代码。对于import要导入的外部的包，可以使用 go get 命令取下来放到GOPATH对应的目录中去。
go get github.com/go-sql-driver/mysql
*/

/**
通过go install 来编译包文件。
一个非main包在编译后会生成一个.a文件（在临时目录下生成，除非使用go install安装到$GOROOT或​$GOPATH下，否则你看不到.a），用于后续可执行程序链接使用。
*/
